const express = require("express");
const router = express.Router();
const md5 = require("md5-node");
const db = require("../db.js");
const multiparty = require("multiparty");

// 登录相关
router.get("/login", function (req, res, next) { // 访问登录页
    res.render("login.ejs");
});

router.get("/product", function (req, res, next) { // 分页显示商品列表
    var sumSQL = "select count(*) as recordCount from product";
    db.com.query(sumSQL, function (err, result) {
        if (err) return console.log(err);
        console.log(result); // [{ recordCount:12 }],数组
        var recordCount = result[0].recordCount; // 取得了查询到的记录总数
        var pageSize = 3; // 定义每页显示多少条
        var pageCount = Math.ceil(recordCount / pageSize); // 计算页码个数

        // 获取地址栏中参数 page，为用户选择的当前页码
        var page = req.query.page || 1; // 第一次打开页面时，取得空值，默认取1
        var start = (page - 1) * pageSize;

        var strSQL = "select * from product order by id desc limit " + start + "," + pageSize; // 按照当前页码查询该页数据
        db.com.query(strSQL, function (err, result) {
            if (err) {
                console.log('[SELECT ERROR] - ', err.message);
                return;
            }
            res.render("product/index", {
                list: result,
                yemashu: pageCount,
                page: page
            });
        });
    });
});

router.post("/doLogin", function (req, res, next) { // 登录提交后，验证账号
    const userName = req.body.username;
    const pas = md5(req.body.password);
    var sql = 'SELECT * FROM admin where user_name=? and password=?';
    let sqlParam = [userName, pas];

    // 根据用户输入进行查询
    db.com.query(sql, sqlParam, function (err, result) {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            return;
        }
        if (result && result.length > 0) { // 若输入账号正确，在表中会查到记录
            // 使用 session 来保存登录人信息，用于权限控制
            req.session.userInfo = result[0];
            // 在路由文件中设置全局变量 userInfo，保存已登录的用户名
            req.app.locals["userInfo"] = req.session.userInfo.user_name;
            res.redirect("/admin/product"); // 跳转到 product 页面
        } else {
            res.send("<script>alert('登录失败');location.href='/admin/login'</script>");
        }
    });
});

// 退出登录
router.get("/logout", function (req, res, next) {
    req.session.destroy(function (err) { // 销毁 Session 信息
        if (err) {
            console.log(err);
        } else {
            res.redirect("/admin/login");
        }
    })
})

// 商品添加路由
router.get("/add", function (req, res, next) {
    res.render("product/productadd");
});

router.post("/doAdd", function (req, res, next) {
    const form = new multiparty.Form();
    // 上传图片的保存地址
    form.uploadDir = "public/upload"; // 上传的图片保存在public文件夹中

    // files为图片上传成功返回的地址信息，fields为获取的表单数据
    form.parse(req, function (err, fields, files) {
        // 获取提交的商品名、价格等数据以及图片上传成功后返回的信息
        const title = fields.title[0];
        const cat_id = fields.cat_id[0];
        const price = fields.price[0];
        const description = fields.description[0];
        const keywords = fields.keywords[0];
        const add_time = new Date();

        // 去掉 public，默认情况下会自动到 public 文件夹中找静态资源
        const pic = files.pic[0].path.substr(7);

        var sql = 'insert into product(name, cat_id, price, content, image, add_time, keywords) values(?, ?, ?, ?, ?, ?, ?)';
        var sqlParam = [title, cat_id, price, description, pic, add_time, keywords];

        db.com.query(sql, sqlParam, function (err, result) {
            if (err) {
                console.log('[INSERT ERROR] - ', err.message);
                return;
            }
            res.redirect("/admin/product");
        });
    });
});

// 商品搜索路由
router.get("/search", function (req, res, next) { // 搜索商品列表
    var key = req.query.key;    // 获取文本框输入
    var strSQL = "select * from product where name like ? order by id desc";
    var strParam = ['%' + key + '%']; // 模糊查询

    db.com.query(strSQL, strParam, function (err, result) {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            return;
        }
        // 不再显示页码
        res.render("product/index", {
            list: result,
            page: -1,
            yemashu: -1
        });
    });
});

// 商品编辑路由 - 获取商品信息
router.get("/edit", function (req, res, next) {
    const id = req.query.id;
    var sql = 'select * from product where id=?';  // 使用参数化查询
    var sqlParam = [id];

    db.com.query(sql, sqlParam, function (err, result) {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            return res.status(500).send("数据库查询错误");
        }

        // 检查是否存在该商品
        if (!result || result.length === 0) {
            return res.status(404).send("商品不存在");
        }

        res.render("product/productedit", {
            item: result[0]  // 传递第一条记录
        });
    });
});
// 商品修改提交路由
router.post("/doEdit", function (req, res, next) {
    const form = new multiparty.Form();
    form.uploadDir = "public/upload";  // 修正为 uploadDir

    form.parse(req, function (err, fields, files) {
        if (err) {
            console.log('[FORM PARSE ERROR] - ', err.message);
            return res.status(500).send("表单解析错误");
        }

        const id = fields.id[0];
        const title = fields.title[0];
        const cat_id = fields.cat_id[0];
        const price = fields.price[0];
        const description = fields.description[0];
        const keywords = fields.keywords[0];

        let sql, sqlParam;

        // 检查是否上传了新图片
        if (files.pic && files.pic[0].originalFilename.length > 0) {
            const pic = files.pic[0].path.substr(7); // 去掉 public/
            sql = `UPDATE product SET 
                name=?, cat_id=?, price=?, 
                content=?, image=?, keywords=? 
                WHERE id=?`;
            sqlParam = [title, cat_id, price, description, pic, keywords, id];
        } else {
            sql = `UPDATE product SET 
                name=?, cat_id=?, price=?, 
                content=?, keywords=? 
                WHERE id=?`;
            sqlParam = [title, cat_id, price, description, keywords, id];
        }

        db.com.query(sql, sqlParam, function (err, result) {
            if (err) {
                console.log('[UPDATE ERROR] - ', err.message);
                return res.status(500).send("数据库更新失败");
            }
            res.redirect("/admin/product");
        });
    });
});

router.get("/delete", function (req, res, next) {
    const id = req.query.id;
    var sql = 'delete from product where id=?';
    var sqlParam = [id];

    db.com.query(sql, sqlParam, function (err, result) {
        if (err) {
            console.log('[DELETE ERROR] - ', err.message);
            return
        }
        res.redirect("/admin/product");
    });
});
module.exports = router;